In [ ]:
#app.py
import hug
@hug.get('/')
def spam():
return 'ham!'
In [ ]:
!hug -f app.py
In [ ]:
spam()
In [ ]:
#app_cli.py
import hug
@hug.cli()
@hug.get('/')
def spam():
return 'ham!'
In [ ]:
!hug -f app_cli.py
In [ ]:
!hug -f app_cli.py -c spam
Czas pokaże czy wiele rodzajów interfejsów to sensowne podejście.
In [ ]:
# przez get i URL jak w dokumentacji, ale to nie REST
import hug
@hug.get()
def hello(name: hug.types.text, age: int):
return "Hello {}! You've lived for {} years.".format(name, age)
hug.API(__name__).http.serve()
In [ ]:
import socketserver
socketserver.TCPServer.allow_reuse_address = True
# zwolnienie socketu zajętego przez proces Notebooka
import gc
gc.collect()
In [ ]:
@hug.get('/smallish-number/{number}')
def hello(number: hug.types.in_range(1,30)):
return {'bigger_number': number+1}
hug.API(__name__).http.serve()
In [ ]:
gc.collect()
In [ ]:
@hug.post('/rectangle', status=hug.HTTP_201)
def hello(a: int, b: int):
return {'width': a, 'height': b}
hug.API(__name__).http.serve()
In [ ]:
gc.collect()
Można definiować swoje typy przez:
hug.types
In [85]:
@hug.get('/', response_headers={'X-bblabla': 'jakas wartosc'})
def spam():
return 'ham!'
hug.API(__name__).http.serve()
In [121]:
gc.collect()
Out[121]:
In [118]:
@hug.directive()
def http_req(**kwargs):
return kwargs['request']
@hug.directive()
def http_resp(**kwargs):
return kwargs['response']
@hug.get('/')
def spam(hug_http_req, hug_http_resp):
print(hug_http_req)
print(hug_http_resp)
print(hug_http_req.headers)
hug_http_resp.status = hug.HTTP_418
return 'ham!'
hug.API(__name__).http.serve()
# czytanie headerów z dyrektywy
# hug_session - ustawianie statusu, też czytanie headerów
In [115]:
gc.collect()
Out[115]:
Zaprawdzam do zapoznania się z resztą dokumentacji (więcej szczegółów) http://www.hug.rest/website/learn/architecture
Jest po kilka sposobów używania Huga, żeby było wygodniej. Ale można też używać API bardziej "verbose".
In [ ]: